package com.dp.client.views.vuelo;

import java.util.Date;
import java.util.List;

import com.dp.client.dto.AlmacenDTO;
import com.dp.client.dto.VueloDTO;
import com.dp.client.servicios.almacenes.IServiciosAlmacen;
import com.dp.client.servicios.almacenes.IServiciosAlmacenAsync;
import com.dp.client.servicios.vuelo.IServiciosVuelo;
import com.dp.client.servicios.vuelo.IServiciosVueloAsync;
import com.dp.client.util.Alerts;
import com.dp.client.views.paquete.PaquetePrincipal;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.CaptionPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.datepicker.client.DateBox;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.IntegerBox;

public class VuelosPrincipal extends Composite {
	private VerticalPanel verticalPanel;
	private CaptionPanel VuelosPanel;
	private FlexTable flexTable;
	private Label lblDestino;
	private ListBox cboxDestino;
	private Label lblEstado;
	private ListBox cboxEstado;
	private Label lblFechaInicio;
	private Label lblFechaFin;
	private DateBox dateBoxInicio;
	private DateBox dateBoxFin;
	private Button btnBuscar;
	private Button btnRefrescar;
	private TablaVuelos tablaVuelos;
	PaquetePrincipal padre;
	IServiciosAlmacenAsync servicioAlmacen = GWT.create(IServiciosAlmacen.class);
	IServiciosVueloAsync servicio = GWT.create(IServiciosVuelo.class);
	private Label lblIdVuelo;
	private IntegerBox intBoxId;
	public VuelosPrincipal( PaquetePrincipal padre ){
		this.padre = padre;
		verticalPanel = new VerticalPanel();
		initWidget(verticalPanel);
		verticalPanel.setSize("85%", "100%");
		
		VuelosPanel = new CaptionPanel("Vuelos");
		verticalPanel.add(VuelosPanel);
		VuelosPanel.setHeight("113px");
		
		flexTable = new FlexTable();
		VuelosPanel.setContentWidget(flexTable);
		flexTable.setSize("595px", "29px");
		
		lblDestino = new Label("Destino :");
		flexTable.setWidget(0, 0, lblDestino);
		
		cboxDestino = new ListBox();
		flexTable.setWidget(0, 1, cboxDestino);
		
		lblEstado = new Label("Estado :");
		flexTable.setWidget(0, 2, lblEstado);
		
		cboxEstado = new ListBox();
		flexTable.setWidget(0, 3, cboxEstado);
		
		lblFechaInicio = new Label("Fecha Inicio  :");
		flexTable.setWidget(1, 0, lblFechaInicio);
		
		dateBoxInicio = new DateBox();
		flexTable.setWidget(1, 1, dateBoxInicio);
		
		lblFechaFin = new Label("Fecha Fin:");
		flexTable.setWidget(1, 2, lblFechaFin);
		
		dateBoxFin = new DateBox();
		flexTable.setWidget(1, 3, dateBoxFin);
		
		lblIdVuelo = new Label("Id Vuelo : ");
		flexTable.setWidget(2, 0, lblIdVuelo);
		
		intBoxId = new IntegerBox();
		flexTable.setWidget(2, 1, intBoxId);
		
		btnBuscar = new Button("Buscar");
		flexTable.setWidget(2, 2, btnBuscar);
		btnBuscar.addClickHandler( new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				buscar();
			}
		});
		btnRefrescar = new Button("Refrescar");
		btnRefrescar.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				refrescar();
			}
		});
		flexTable.setWidget(2, 3, btnRefrescar);
		tablaVuelos = new TablaVuelos();
		verticalPanel.add(tablaVuelos);
		loadData();
	}
	void loadData(){
		cboxEstado.addItem("Seleccionar","");
		cboxEstado.addItem("En Almacen" , "0" );
		cboxEstado.addItem("En Vuelo" , "1" );
		cboxEstado.addItem("En Destino","2");
		cboxEstado.addItem("Cancelado","3");
		cboxEstado.setSelectedIndex(0);
		loadAlmacenes();
	}
	void loadAlmacenes(){
		cboxDestino.clear();
		cboxDestino.addItem("Seleccione" , "-1");
		cboxDestino.setSelectedIndex(0);
		servicioAlmacen.listAlmacenes( new AsyncCallback<List<AlmacenDTO>>() {
			@Override
			public void onFailure(Throwable caught) {
				Alerts.dialogErrorConexion();
			}
			@Override
			public void onSuccess(List<AlmacenDTO> result) {
				for( AlmacenDTO almacen : result ){
					cboxDestino.addItem(almacen.getDescripcion() , ""+almacen.getId() );
				}
			}
		});
	}
	void refrescar(){
		loadAlmacenes();
	}
	void buscar(){
		String idOrigen = padre.getIdAlmacen()+"";
		String idDestino = cboxDestino.getValue(cboxDestino.getSelectedIndex())+"";
		String id = intBoxId.getValue() == null ? "" : intBoxId.getValue()+ "";
		Date inicio = dateBoxInicio.getValue();
		Date fin = dateBoxFin.getValue();
		String idEstado = cboxEstado.getValue( cboxEstado.getSelectedIndex() ) ;
		servicio.getQuery( id , idOrigen,idDestino, inicio, fin, idEstado,new AsyncCallback<List<VueloDTO>>() {
			@Override
			public void onFailure(Throwable caught) {
				Alerts.dialogErrorConexion();
			}
			public void onSuccess(List<VueloDTO> result) {
				tablaVuelos.setData( result );
			}
		});
	}
}
